package com.jzg.sys.api.base;

import java.util.List;
import java.util.Set;

/** 
 * @Package com.jzg.api.token 
 * @ClassName: TokenService 
 * @Description: token管理 
 * @author 李志鹏 lzp 
 * @date 2016年8月16日 下午2:49:05 
 *  
 */
public interface CacheService {
	
	/**
     * @param key
     * @param obj
     * @param second 有效秒数
     * @param sysCode
     */
    public void put(String key, Object obj, String sysCode, Long second);

    public void put(String key, Object obj, String sysCode);

    public Object get(String key, String sysCode);

    public void remove(String key, String sysCode);

    boolean hasKey(String key, String sysCode);

	/** 
	* @Title: addSet
	* @Description: 添加集合
	* @param key
	* @param sysCode
	* @param second
	* @param values 
	* @return
	* @Author: lzp 李志鵬
	* @Date: 2019/2/21 
	*/ 
    void addSet(String key, String sysCode, Long second, Object... values);

	/** 
	 * @Title: popSet 
	 * @Description: 按key去除set 
	 * @param key
	 * @param sysCode
	 * @author 李志鹏 lzp  
	 * @date 2017年12月8日 上午11:27:34 
	 */
	void popSet(String key, String sysCode);

	/** 
	 * @Title: members 
	 * @Description: 是否在存在key的set
	 * @param key
	 * @param sysCode
	 * @author 李志鹏 lzp  
	 * @return 
	 * @date 2017年12月8日 上午11:28:03 
	 */
	boolean hasKeySet(String key, String sysCode);

	/** 
	 * @Title: randomMembers 
	 * @Description: 随机取数  可能重复
	 * @param key
	 * @param count 取出个数
	 * @param sysCode
	 * @return
	 * @author 李志鹏 lzp  
	 * @date 2017年12月8日 上午11:29:00 
	 */
	List<Object> randomMembers(String key, long count, String sysCode);
	
	/** 
	 * @Title: distinctRandomMembers 
	 * @Description: 随机取数  不可能重复
	 * @param key
	 * @param count
	 * @param sysCode
	 * @return
	 * @author 李志鹏 lzp  
	 * @date 2017年12月9日 下午5:06:03 
	 */
	Set<Object> distinctRandomMembers(String key, long count, String sysCode);
	
	/** 
	 * @Title: addMap 
	 * @Description: 增加map 
	 * @param key 主key
	 * @param hashKey 内部map的key
	 * @param sysCode
	 * @param value
	 * @author 李志鹏 lzp  
	 * @date 2018年1月27日 下午2:59:26 
	 */
	public void addMap(String key, Object hashKey, String sysCode, Object value);

	/** 
	 * @Title: hasKey 
	 * @Description: 在map中是否存在对应key
	 * @param key 主key
	 * @param hashKey 内部map的key
	 * @param sysCode
	 * @return
	 * @author 李志鹏 lzp  
	 * @date 2018年1月27日 下午3:00:59 
	 */
	public boolean hasKeyMap(String key, Object hashKey, String sysCode);

	/** 
	 * @Title: getMap 
	 * @Description: 获取值
	 * @param key 主key
	 * @param hashKey 内部map的key
	 * @param sysCode
	 * @return
	 * @author 李志鹏 lzp  
	 * @date 2018年1月27日 下午3:02:59 
	 */
	public Object getMap(String key, Object hashKey, String sysCode);

	/** 
	 * @Title: deleteMap 
	 * @Description: 删除map对应的值 
	 * @param key 主key
	 * @param sysCode
	 * @param hashKeys 内部map的key
	 * @author 李志鹏 lzp  
	 * @date 2018年1月27日 下午3:03:22 
	 */
	public void deleteMap(String key, String sysCode, Object... hashKeys) ;
}
